package com.qingcloud.adminbackend.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qingcloud.adminbackend.controller.open.param.OrgInfoParam;
import com.qingcloud.adminbackend.base.AjaxResult;
import com.qingcloud.adminbackend.entity.sysorder.SysOrder;
import com.qingcloud.adminbackend.entity.sysorg.*;
import com.qingcloud.adminbackend.entity.sysorg.*;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 客户表 服务类
 * </p>
 *
 * @author liyuhong
 * @since 2018-11-15
 */
public interface ISysOrgService extends IService<SysOrg> {
    /**
     * 客户列表
     *
     * @param sysOrgDTO
     * @param isAdmin
     * @return
     */
    IPage<SysOrgBO> findSysOrgList(SysOrgDTO sysOrgDTO, boolean isAdmin);

    /**
     * 添加修改客户
     *
     * @param sysOrg
     * @return
     */
    AjaxResult setSysOrg(SysOrg sysOrg, boolean isAdmin);

    /**
     * 删除客户
     *
     * @param ids
     * @return
     */
    AjaxResult deleteSysOrg(List<String> ids);

    /**
     * 查询客户详情
     *
     * @param id
     * @return
     */
    SysOrg findSysOrgById(String id);

    /**
     * 客户关联的订单
     *
     * @param sysOrgOrderDTO
     * @return
     */
    IPage<SysOrder> findOrgOrderByOrgId(SysOrgOrderDTO sysOrgOrderDTO);

    /**
     * 当前登录用户的客户管理权限范围内的有写权限的组织
     *
     * @param orgId
     * @param userId
     * @param isAdmin
     * @return
     */
    List<SysOrg> findOrgByUserOrg(String orgId, String userId, Boolean isAdmin);

    /**
     * 查询登录用户可管理客户以及子客户
     *
     * @param businessType
     * @param userId
     * @param isAdmin
     * @return
     */
    List<SysOrg> findOrgList(String businessType, String userId, Boolean isAdmin);

    /**
     * 查询登录用户可管理可查看的客户以及子客户
     *
     * @param userId
     * @param isAdmin
     * @return
     */
    List<SysOrg> getOrgTreeByLoginUser(String businessType, String userId, boolean isAdmin);

    /**
     * 查询登录用户可管理客户/订单/设备池
     *
     * @param userId
     * @param isAdmin
     * @return
     */
    SysUserMgrDTO findOrgToOrderToPool(String userId, boolean isAdmin, String parameter, String businessType);

    /**
     * 业务类型
     *
     * @return
     */
    List<SysBusinessTypeDTO> getBusinessType(String userId);

    /**
     * 可管理业务种类
     */
    List<SysBusinessTypeDTO> getManageBusinessApp(String userId);

    /**
     * 用户身份
     *
     * @return
     */
    List<Map<String, Object>> getRoleByBusinessType(String businessType, String userId);

    /**
     * 用户身份
     *
     * @return
     */
    List<Map<String, Object>> getRoleBusinessTypeByAuthorUser(String userId);

    /**
     * 根据机构ID和业务种类查询机构信息
     */
    List<SysOrgInfo> findOrgInfo(OrgInfoParam orgInfoParam);

    /**
     * 根据父客户ID，查询客户下的分支机构
     *
     * @param parentId 父客户ID
     * @return 分支机构信息
     */
    List<SysOrgInfo> findChild(String parentId);

    List<SysOrgUserInfo> getOrgUserTree(String userId);

    /**
     * 查询用户任务管理权限的所有组织ID
     *
     * @param userId 用户ID
     * @return 组织ID集合
     */
    Set<String> findReadableUserTaskOrgIds(String userId);

    /**
     * 查询用户任务所属组织
     */
    String findUserTaskOrg(String userId);

    /**
     * 按企业名称统计
     */
    int countOrgByName(String name);

    /**
     * 注册公司组织
     */
    String registerOrg(String name);

}
